package cheng.app.cnbeta.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Environment;
import android.util.Log;
public class ImageUtil {
private static final String TAG = "ImageUtil";
public static boolean hasSdcard() {
try {
return Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private static String getScreenshotName() {
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat("'IMG'_yyyyMMdd_HHmmss");
return dateFormat.format(date) + ".jpg";
}
public static String saveScreenshot(Bitmap bitmap) {
String result = "";
if (bitmap != null) {
String fileName = getScreenshotName();
File dir = new File(Configs.SCREENSHOT_PATH);
if (!dir.exists()) {
dir.mkdirs();
}
File f = new File(Configs.SCREENSHOT_PATH, fileName);
if (!f.exists()) {
try {
f.createNewFile();
FileOutputStream outputStream = new FileOutputStream(f);
bitmap.compress(Bitmap.CompressFormat.JPEG, 75, outputStream);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
result = Configs.SCREENSHOT_PATH + '/' + fileName;
}
return result;
}
public static String getFileName(String url) {
String path = url.toLowerCase();
StringBuilder sb = new StringBuilder();
path = path.replaceAll("[^\\w]+", "_");
sb.append(path);
if (path.endsWith("png")) {
sb.append(".png");
} else if (path.endsWith("gif")) {
sb.append(".gif");
} else {
sb.append(".jpg");
}
Log.d(TAG,"getFileName: "+sb.toString());
return sb.toString();
}
public static void removeImage(String url, SQLiteDatabase db) {
Log.d(TAG, "removeImage: " + url);
String path = Configs.IMAGE_PATH + "/" + getFileName(url);
File file = new File(path);
if (!file.exists()) {
Log.e(TAG, "removeImage: file not exists");
return;
}
file.delete();
}
public static void storeImage(byte[] data, String url, SQLiteDatabase db) {
Log.d(TAG, "storeImage: " + url);
OutputStream outputStream = null;
String name = getFileName(url);
File dir = new File(Configs.IMAGE_PATH);
if (!dir.exists())
dir.mkdirs();
File file = new File(Configs.IMAGE_PATH, name);
try {
outputStream = new FileOutputStream(file);
outputStream.write(data);
outputStream.close();
// ContentValues values = new ContentValues();
// values.put(Columns.DATA_URL, url);
// values.put(Columns.PATH, Configs.IMAGE_PATH + "/" + name);
// db.insert(TABLES.IMAGE, null, values);
} catch (FileNotFoundException ex) {
Log.w(TAG, ex);
} catch (IOException ex) {
Log.w(TAG, ex);
}
}
public static byte[] readFromStore(String url, SQLiteDatabase db) {
Log.d(TAG, "readFromStore: " + url);
String path = Configs.IMAGE_PATH + "/" + getFileName(url);
try {
File file = new File(path);
if (!file.exists()) {
Log.e(TAG, "readFromStore: image not found in store");
return null;
} else {
FileInputStream f = new FileInputStream(path);
int length = f.available();
byte[] buffer = new byte[length];
f.read(buffer);
f.close();
return buffer;
}
} catch (FileNotFoundException ex) {
Log.w(TAG, ex);
return null;
} catch (IOException ex) {
Log.w(TAG, ex);
return null;
}
}
public static InputStream getRequest(String path) throws Exception {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
if (conn.getResponseCode() == 200) {
return conn.getInputStream();
}
return null;
}
public static byte[] readInputStream(InputStream inStream) throws Exception {
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outSteam.write(buffer, 0, len);
}
outSteam.close();
inStream.close();
return outSteam.toByteArray();
}
public static Drawable loadImageFromUrl(String url) throws IOException {
URL m;
InputStream i = null;
m = new URL(url);
i = (InputStream) m.getContent();
Drawable d = Drawable.createFromStream(i, "src");
return d;
}
public static Drawable getDrawableFromUrl(String url) throws Exception {
return Drawable.createFromStream(getRequest(url), null);
}
public static Bitmap getBitmapFromUrl(String url) throws Exception {
byte[] bytes = getBytesFromUrl(url);
return byteToBitmap(bytes);
}
public static Bitmap getRoundBitmapFromUrl(String url, int pixels) throws Exception {
byte[] bytes = getBytesFromUrl(url);
Bitmap bitmap = byteToBitmap(bytes);
return toRoundCorner(bitmap, pixels);
}
public static Drawable geRoundDrawableFromUrl(String url, int pixels) throws Exception {
byte[] bytes = getBytesFromUrl(url);
BitmapDrawable bitmapDrawable = (BitmapDrawable) byteToDrawable(bytes);
return toRoundCorner(bitmapDrawable, pixels);
}
public static byte[] getBytesFromUrl(String url) throws Exception {
return readInputStream(getRequest(url));
}
public static Bitmap byteToBitmap(byte[] byteArray) {
if (byteArray.length != 0) {
return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
} else {
return null;
}
}
public static Drawable byteToDrawable(byte[] byteArray) {
ByteArrayInputStream ins = new ByteArrayInputStream(byteArray);
return Drawable.createFromStream(ins, null);
}
public static byte[] Bitmap2Bytes(Bitmap bm) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
public static Bitmap drawableToBitmap(Drawable drawable) {
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable
.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}
public static Bitmap toGrayscale(Bitmap bmpOriginal) {
int width, height;
height = bmpOriginal.getHeight();
width = bmpOriginal.getWidth();
Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
Canvas c = new Canvas(bmpGrayscale);
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);
c.drawBitmap(bmpOriginal, 0, 0, paint);
return bmpGrayscale;
}
public static Bitmap toGrayscale(Bitmap bmpOriginal, int pixels) {
return toRoundCorner(toGrayscale(bmpOriginal), pixels);
}
public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) {
Bitmap output = Bitmap
.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
final float roundPx = pixels;
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
public static Bitmap toRound(Bitmap bitmap) {
Bitmap output = Bitmap
.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
float cx = bitmap.getWidth() / 2;
float cy = bitmap.getHeight() / 2;
float radius = bitmap.getWidth() / 2;
canvas.drawCircle(cx, cy, radius, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
public static BitmapDrawable toRoundCorner(BitmapDrawable bitmapDrawable, int pixels) {
Bitmap bitmap = bitmapDrawable.getBitmap();
bitmapDrawable = new BitmapDrawable(toRoundCorner(bitmap, pixels));
return bitmapDrawable;
}
}